package taskqueue

import (
    "sync"
    "github.com/astaxie/beego/logs"
    "cloud_worm/util/uqueue"
)

/**
 相关的常量
 */
const (
    TaskCoroutineLimit = 4
)

/**
 队列queue
 */
type fastQueInst struct {
    MsgQ            *uqueue.Queue
}

/**
 对外通过获取的接口
 */
func FastQueInst() *fastQueInst {
    return taskQueue
}

/**
 模块的初始化接口
 */
var taskQueue *fastQueInst
var taskQueueOnce sync.Once

/**
 在main函数中采用_ import的方式调用该init接口实现初始化
 */
func init()  {
    taskQueueOnce.Do(func() {
        taskQueue = &fastQueInst{}
        // fast queue的队列长度设置为：100w的容量
        taskQueue.MsgQ = uqueue.NewQueueAndRun(TaskHandler, 1024 * 100 * 10, TaskCoroutineLimit)
        logs.Info("init create task queue.")
    })

    taskQ := FastQueInst()
    if taskQ == nil {
        logs.Error("init create task queue failed.")
    }
}


/**
 队列成员item
 */
type TaskWorker interface {
    Done()                          // 加入任务的类型必须具备Done接口
}

/**
 upgrade worm agent handler
 */
func TaskHandler(item interface{})  {
    taskItem := item.(TaskWorker)

    taskItem.Done()

    return
}
